<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>CSS前端代码规范 | Jimmey-Jiang&#39;s Blog</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="规范：你是否常常碰到以下问题：你总是看不懂他写的代码，或者读起来很吃力；你需要改他的代码却无从下手，或总是要去问他这里是什么改了会不会影响其他代码；你和他一起开发一个产品，你总是怕代码和他有冲突或互相影响；你的代码在多次维护任务之后变得越来越臃肿，越来越难以维护。解决以上问题只需一种方法——读我们的规范！">
<meta name="keywords" content="CSS">
<meta property="og:type" content="article">
<meta property="og:title" content="CSS前端代码规范">
<meta property="og:url" content="http://Jimmey-Jiang.github.io/2016/12/31/Skill/norm/normCSS/index.html">
<meta property="og:site_name" content="Jimmey-Jiang&#39;s Blog">
<meta property="og:description" content="规范：你是否常常碰到以下问题：你总是看不懂他写的代码，或者读起来很吃力；你需要改他的代码却无从下手，或总是要去问他这里是什么改了会不会影响其他代码；你和他一起开发一个产品，你总是怕代码和他有冲突或互相影响；你的代码在多次维护任务之后变得越来越臃肿，越来越难以维护。解决以上问题只需一种方法——读我们的规范！">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2017-07-28T10:54:48.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="CSS前端代码规范">
<meta name="twitter:description" content="规范：你是否常常碰到以下问题：你总是看不懂他写的代码，或者读起来很吃力；你需要改他的代码却无从下手，或总是要去问他这里是什么改了会不会影响其他代码；你和他一起开发一个产品，你总是怕代码和他有冲突或互相影响；你的代码在多次维护任务之后变得越来越臃肿，越来越难以维护。解决以上问题只需一种方法——读我们的规范！">
  
    <link rel="alternative" href="/atom.xml" title="Jimmey-Jiang&#39;s Blog" type="application/atom+xml">
  
  
    <link rel="icon" href="/img/favicon.png">
  
  
      <link rel="stylesheet" href="//cdn.bootcss.com/animate.css/3.5.0/animate.min.css">
  
  <link rel="stylesheet" href="/css/style.css">
  <link rel="stylesheet" href="/font-awesome/css/font-awesome.min.css">
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
  
  
      <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  
  <!-- 加载特效 -->
    <script src="/js/pace.js"></script>
    <link href="/css/pace/pace-theme-flash.css" rel="stylesheet" />
  <script>
      var yiliaConfig = {
          rootUrl: '/',
          fancybox: true,
          animate: true,
          isHome: false,
          isPost: true,
          isArchive: false,
          isTag: false,
          isCategory: false,
          open_in_new: false
      }
  </script>
</head>
<body>
  <div id="container">
    <div class="left-col">
    <div class="overlay"></div>
<div class="intrude-less">
    <header id="header" class="inner">
        <a href="/" class="profilepic">
            
            <img lazy-src="/img/head.jpg" class="js-avatar">
            
        </a>

        <hgroup>
          <h1 class="header-author"><a href="/" title="Hi Mate">安与生</a></h1>
        </hgroup>

        
        <p class="header-subtitle">城已成，兵不封，鼓不停，志不移，行不息</p>
        
        
            <form>
                <input type="text" class="st-default-search-input search" id="search" placeholder=" Search...">
            </form>
        
        
            <div id="switch-btn" class="switch-btn">
                <div class="icon">
                    <div class="icon-ctn">
                        <div class="icon-wrap icon-house" data-idx="0">
                            <div class="birdhouse"></div>
                            <div class="birdhouse_holes"></div>
                        </div>
                        <div class="icon-wrap icon-ribbon hide" data-idx="1">
                            <div class="ribbon"></div>
                        </div>
                        
                        <div class="icon-wrap icon-link hide" data-idx="2">
                            <div class="loopback_l"></div>
                            <div class="loopback_r"></div>
                        </div>
                        
                        
                        <div class="icon-wrap icon-me hide" data-idx="3">
                            <div class="user"></div>
                            <div class="shoulder"></div>
                        </div>
                        
                    </div>
                    
                </div>
                <div class="tips-box hide">
                    <div class="tips-arrow"></div>
                    <ul class="tips-inner">
                        <li>菜单</li>
                        <li>标签</li>
                        
                        <li>友情链接</li>
                        
                        
                        <li>关于我</li>
                        
                    </ul>
                </div>
            </div>
        

        <div id="switch-area" class="switch-area">
            <div class="switch-wrap">
                <section class="switch-part switch-part1">
                    <nav class="header-menu">
                        <ul>
                        
                            <li><a href="/archives">所有文章</a></li>
                        
                            <li><a href="/works">作品展示</a></li>
                        
                           <li><a href="/about">留言打卡</a></li>
                        
                            <li><a  target="_blank" href="https://tuchong.com/1496450/">摄影集展示</a></li>
                        
                        </ul>
                    </nav>
                    <nav class="header-nav">
                        <ul class="social">
                            
                                <a class="fl mail" target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=4trX0tXT19PV1aKTk8yBjY8" title="mail">mail</a>
                            
                                <a class="fl github" target="_blank" href="https://github.com/Jimmey-Jiang" title="github">github</a>
                            
                                <a class="fl zhihu" target="_blank" href="https://www.zhihu.com" title="zhihu">zhihu</a>
                            
                                <a class="fl weibo" target="_blank" href="http://weibo.com" title="weibo">weibo</a>
                            
                                <a class="fl google" target="_blank" href="http://i.youku.com" title="google">google</a>
                            
                                <a class="fl twitter" target="_blank" href="http://twitter.com" title="twitter">twitter</a>
                            
                                <a class="fl Instagram" target="_blank" href="https://www.instagram.com" title="Instagram">Instagram</a>
                            
                                <a class="fl linkedin" target="_blank" href="https://www.linkedin.com" title="linkedin">linkedin</a>
                            
                        </ul>
                    </nav>
                </section>
                
                
                <section class="switch-part switch-part2">
                    <div class="widget tagcloud" id="js-tagcloud">
                        <a href="/tags/Ajax/" style="font-size: 11.67px;">Ajax</a> <a href="/tags/CDN/" style="font-size: 10px;">CDN</a> <a href="/tags/CSS/" style="font-size: 18.33px;">CSS</a> <a href="/tags/CSS3/" style="font-size: 11.67px;">CSS3</a> <a href="/tags/Chrome/" style="font-size: 10px;">Chrome</a> <a href="/tags/Development/" style="font-size: 10px;">Development</a> <a href="/tags/Front-end-outline/" style="font-size: 10px;">Front end outline</a> <a href="/tags/FrontPlan/" style="font-size: 10px;">FrontPlan</a> <a href="/tags/Git/" style="font-size: 11.67px;">Git</a> <a href="/tags/Gulp/" style="font-size: 10px;">Gulp</a> <a href="/tags/HTML/" style="font-size: 13.33px;">HTML</a> <a href="/tags/Hack/" style="font-size: 10px;">Hack</a> <a href="/tags/Hexo/" style="font-size: 16.67px;">Hexo</a> <a href="/tags/Interview/" style="font-size: 10px;">Interview</a> <a href="/tags/JavaScript/" style="font-size: 13.33px;">JavaScript</a> <a href="/tags/Javascript/" style="font-size: 10px;">Javascript</a> <a href="/tags/Markdown/" style="font-size: 10px;">Markdown</a> <a href="/tags/Mobile/" style="font-size: 13.33px;">Mobile</a> <a href="/tags/NodeJs/" style="font-size: 10px;">NodeJs</a> <a href="/tags/OOCSS/" style="font-size: 10px;">OOCSS</a> <a href="/tags/React/" style="font-size: 10px;">React</a> <a href="/tags/ReactNative/" style="font-size: 20px;">ReactNative</a> <a href="/tags/Sass/" style="font-size: 10px;">Sass</a> <a href="/tags/Sublime/" style="font-size: 15px;">Sublime</a> <a href="/tags/Terminal/" style="font-size: 10px;">Terminal</a> <a href="/tags/Video/" style="font-size: 10px;">Video</a> <a href="/tags/Vue/" style="font-size: 15px;">Vue</a> <a href="/tags/WeChatSDK/" style="font-size: 10px;">WeChatSDK</a> <a href="/tags/rem/" style="font-size: 10px;">rem</a> <a href="/tags/window-7/" style="font-size: 10px;">window 7</a>
                    </div>
                </section>
                
                
                
                <section class="switch-part switch-part3">
                    <div id="js-friends">
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://MOxFIVE.github.io/">MOxFIVE</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://www.vsay.cn/">DoubleV</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://www.ccwebsite.com/">兮兮</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://blog.dandyweng.com/">翁天信</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://www.plqblog.com/views/index.php">潘利强</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://www.hankin.cn/">hankin</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="http://blog.waydrow.com/">waydrow</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="https://www.tangbc.com">TANGBC</a>
                    
                      <a target="_blank" class="main-nav-link switch-friends-link" href="https://www.w3ctrain.com/">Helkyle</a>
                    
                    </div>
                </section>
                

                
                
                <section class="switch-part switch-part4">
                
                    <div id="js-aboutme">城已成，兵不封，鼓不停，志不移，行不息</div>
                </section>
                
            </div>
        </div>
    </header>                
</div>
    </div>
    <div class="mid-col">
      <nav id="mobile-nav">
      <div class="overlay">
          <div class="slider-trigger"></div>
          <h1 class="header-author js-mobile-header hide"><a href="/" title="Me">安与生</a></h1>
      </div>
    <div class="intrude-less">
        <header id="header" class="inner">
            <a href="/" class="profilepic">
                
                    <img lazy-src="/img/head.jpg" class="js-avatar">
                
            </a>
            <hgroup>
              <h1 class="header-author"><a href="/" title="Me">安与生</a></h1>
            </hgroup>
            
            <p class="header-subtitle">城已成，兵不封，鼓不停，志不移，行不息</p>
            
            <nav class="header-menu">
                <ul>
                
                    <li><a href="/archives">所有文章</a></li>
                
                    <li><a href="/works">作品展示</a></li>
                
                   <li><a href="/about">留言打卡</a></li>
                
                    <li><a  target="_blank" href="https://tuchong.com/1496450/">摄影集展示</a></li>
                
                <div class="clearfix"></div>
                </ul>
            </nav>
            <nav class="header-nav">
                <div class="social">
                    
                        <a class="mail" target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=4trX0tXT19PV1aKTk8yBjY8" title="mail">mail</a>
                    
                        <a class="github" target="_blank" href="https://github.com/Jimmey-Jiang" title="github">github</a>
                    
                        <a class="zhihu" target="_blank" href="https://www.zhihu.com" title="zhihu">zhihu</a>
                    
                        <a class="weibo" target="_blank" href="http://weibo.com" title="weibo">weibo</a>
                    
                        <a class="google" target="_blank" href="http://i.youku.com" title="google">google</a>
                    
                        <a class="twitter" target="_blank" href="http://twitter.com" title="twitter">twitter</a>
                    
                        <a class="Instagram" target="_blank" href="https://www.instagram.com" title="Instagram">Instagram</a>
                    
                        <a class="linkedin" target="_blank" href="https://www.linkedin.com" title="linkedin">linkedin</a>
                    
                </div>
            </nav>
        </header>                
    </div>
</nav>
      <div class="body-wrap"><article id="post-Skill/norm/normCSS" class="article article-type-post" itemscope itemprop="blogPost">
  
    <div class="article-meta">
      <a href="/2016/12/31/Skill/norm/normCSS/" class="article-date">
      <time datetime="2016-12-31T10:29:00.000Z" itemprop="datePublished">2016-12-31</time>
</a>
    </div>
  
  <div class="article-inner">
    
      <input type="hidden" class="isFancy" />
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      CSS前端代码规范
    </h1>
  

      </header>
      
      <div class="article-info article-info-post">
        
    <div class="article-category tagcloud">
    <a class="article-category-link" href="/categories/Norm/">Norm</a>
    </div>

        
    <div class="article-tag tagcloud">
        <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/CSS/">CSS</a></li></ul>
    </div>

        <div class="clearfix"></div>
      </div>
      
    
    <div class="article-entry" itemprop="articleBody">
      
          
        <p>　　<strong>规范：</strong>你是否常常碰到以下问题：你总是看不懂他写的代码，或者读起来很吃力；你需要改他的代码却无从下手，或总是要去问他这里是什么改了会不会影响其他代码；你和他一起开发一个产品，你总是怕代码和他有冲突或互相影响；你的代码在多次维护任务之后变得越来越臃肿，越来越难以维护。解决以上问题只需一种方法——读我们的规范！<br><a id="more"></a></p>
<h2 id="分类方法"><a href="#分类方法" class="headerlink" title="分类方法"></a>分类方法</h2><h3 id="CSS文件的分类"><a href="#CSS文件的分类" class="headerlink" title="CSS文件的分类"></a>CSS文件的分类</h3><ol>
<li>公共型样式：global<br>“标签的重置和设置默认值”、“统一调用背景图和清除浮动或其他需统一处理的长样式”、“网站通用布局”、“通用模块和其扩展”、“元件和其扩展”、“功能类样式”、“皮肤类样式”。</li>
<li>特殊型样式：index<br>当某个栏目或页面的样式与网站整体差异较大或者维护率较高时，可以独立引用一个样式<br>“特殊的布局、模块和元件及扩展”、“特殊的功能、颜色和背景”，也可以是某个大型控件或模块的独立样式。</li>
<li>皮肤型样式：skin<br>如果产品需要换肤功能，那么我们需要将颜色、背景等抽离出来放在这里。</li>
</ol>
<h3 id="CSS内部的分类及其顺序"><a href="#CSS内部的分类及其顺序" class="headerlink" title="CSS内部的分类及其顺序"></a>CSS内部的分类及其顺序</h3><ol>
<li>重置（reset）和默认（base）（tags）：消除默认样式和浏览器差异，并设置部分标签的初始样式，以减少后面的重复劳动！你可以根据你的网站需求设置！</li>
<li>统一处理：建议在这个位置统一调用背景图（这里指多个布局或模块或元件共用的图）和清除浮动（这里指通用性较高的布局、模块、元件内的清除）等统一设置处理的样式！</li>
<li>布局（grid）（.g-）：将页面分割为几个大块，通常有头部、主体、主栏、侧栏、尾部等！</li>
<li>模块（module）（.m-）：通常是一个语义化的可以重复使用的较大的整体！比如导航、登录、注册、各种列表、评论、搜索等！</li>
<li>元件（unit）（.u-）：通常是一个不可再分的较为小巧的个体，通常被重复用于各种模块中！比如按钮、输入框、loading、图标等！</li>
<li>功能（function）（.f-）：为方便一些常用样式的使用，我们将这些使用率较高的样式剥离出来，按需使用，通常这些选择器具有固定样式表现，比如清除浮动等！不可滥用！</li>
<li>皮肤（skin）（.s-）：如果你需要把皮肤型的样式抽离出来，通常为文字色、背景色（图）、边框色等，非换肤型网站通常只提取文字色！非换肤型网站不可滥用此类！</li>
<li>状态（.z-）：为状态类样式加入前缀，统一标识，方便识别，她只能组合使用或作为后代出现（.u-ipt.z-dis{}，.m-list li.z-sel{}），具体详见命名规则的扩展相关项。</li>
</ol>
<figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/* 重置 */</span></div><div class="line"><span class="selector-tag">div</span>,<span class="selector-tag">p</span>,<span class="selector-tag">ul</span>,<span class="selector-tag">ol</span>,<span class="selector-tag">li</span>&#123;<span class="attribute">margin</span>:<span class="number">0</span>;<span class="attribute">padding</span>:<span class="number">0</span>;&#125;</div><div class="line"><span class="comment">/* 默认 */</span></div><div class="line"><span class="selector-tag">strong</span>,<span class="selector-tag">em</span>&#123;<span class="attribute">font-style</span>:normal;<span class="attribute">font-weight</span>:bold;&#125;</div><div class="line"><span class="comment">/* 统一调用背景图 */</span></div><div class="line"><span class="selector-class">.m-logo</span> <span class="selector-tag">a</span>,<span class="selector-class">.m-nav</span> <span class="selector-tag">a</span>,<span class="selector-class">.m-nav</span> <span class="selector-tag">em</span>&#123;<span class="attribute">background</span>:<span class="built_in">url</span>(images/sprite.png) no-repeat <span class="number">9999px</span> <span class="number">9999px</span>;&#125;</div><div class="line"><span class="comment">/* 统一清除浮动 */</span></div><div class="line"><span class="selector-class">.g-bdc</span><span class="selector-pseudo">:after</span>,<span class="selector-class">.m-dimg</span> <span class="selector-tag">ul</span><span class="selector-pseudo">:after</span>,<span class="selector-class">.u-tab</span><span class="selector-pseudo">:after</span>&#123;<span class="attribute">display</span>:block;<span class="attribute">visibility</span>:hidden;<span class="attribute">clear</span>:both;<span class="attribute">height</span>:<span class="number">0</span>;<span class="attribute">overflow</span>:hidden;<span class="attribute">content</span>:<span class="string">'.'</span>;&#125;</div><div class="line"><span class="selector-class">.g-bdc</span>,<span class="selector-class">.m-dimg</span> <span class="selector-tag">ul</span>,<span class="selector-class">.u-tab</span>&#123;<span class="attribute">zoom</span>:<span class="number">1</span>;&#125;</div><div class="line"><span class="comment">/* 布局 */</span></div><div class="line"><span class="selector-class">.g-sd</span>&#123;<span class="attribute">float</span>:left;<span class="attribute">width</span>:<span class="number">300px</span>;&#125;</div><div class="line"><span class="comment">/* 模块 */</span></div><div class="line"><span class="selector-class">.m-logo</span>&#123;<span class="attribute">width</span>:<span class="number">200px</span>;<span class="attribute">height</span>:<span class="number">50px</span>;&#125;</div><div class="line"><span class="comment">/* 元件 */</span></div><div class="line"><span class="selector-class">.u-btn</span>&#123;<span class="attribute">height</span>:<span class="number">20px</span>;<span class="attribute">border</span>:<span class="number">1px</span> solid <span class="number">#333</span>;&#125;</div><div class="line"><span class="comment">/* 功能 */</span></div><div class="line"><span class="selector-class">.f-tac</span>&#123;<span class="attribute">text-align</span>:center;&#125;</div><div class="line"><span class="comment">/* 皮肤 */</span></div><div class="line"><span class="selector-class">.s-fc</span>,<span class="selector-tag">a</span><span class="selector-class">.s-fc</span><span class="selector-pseudo">:hover</span>&#123;<span class="attribute">color</span>:<span class="number">#fff</span>;&#125;</div></pre></td></tr></table></figure>
<h2 id="命名规则"><a href="#命名规则" class="headerlink" title="命名规则"></a>命名规则</h2><h3 id="使用类选择器，放弃ID选择器"><a href="#使用类选择器，放弃ID选择器" class="headerlink" title="使用类选择器，放弃ID选择器"></a>使用类选择器，放弃ID选择器</h3><p>ID在一个页面中的唯一性导致了如果以ID为选择器来写CSS，就无法重用。</p>
<h3 id="NEC特殊字符：”-“连字符"><a href="#NEC特殊字符：”-“连字符" class="headerlink" title="NEC特殊字符：”-“连字符"></a>NEC特殊字符：”-“连字符</h3><p>“-“在本规范中并不表示连字符的含义。<br>她只表示两种含义：分类前缀分隔符、扩展分隔符，详见以下具体规则。</p>
<h3 id="分类的命名方法：使用单个字母-”-“为前缀"><a href="#分类的命名方法：使用单个字母-”-“为前缀" class="headerlink" title="分类的命名方法：使用单个字母+”-“为前缀"></a>分类的命名方法：使用单个字母+”-“为前缀</h3><p>布局（grid）（.g-）；模块（module）（.m-）；元件（unit）（.u-）；功能（function）（.f-）；皮肤（skin）（.s-）；状态（.z-）。<br>对以上的解释详情参见：分类方法中的“CSS内部的分类及其顺序”。<br>注：在你样式中的选择器总是要以上面前五类开头，然后在里面使用后代选择器。<br>　　如果这五类不能满足你的需求，你可以另外定义一个或多个大类，但必须符合单个字母+”-“为前缀的命名规则，即 .x- 的格式。<br>　　特殊：.j-将被专用于JS获取节点，请勿使用.j-定义样式。</p>
<h3 id="后代选择器命名"><a href="#后代选择器命名" class="headerlink" title="后代选择器命名"></a>后代选择器命名</h3><p>约定不以单个字母+”-“为前缀且长度大于等于2的类选择器为后代选择器，如：.item为m-list模块里的每一个项，.text为m-list模块里的文本部分：.m-list .item{}.m-list .text{}。<br>一个语义化的标签也可以是后代选择器，比如：.m-list li{}。<br>不允许单个字母的类选择器出现，原因详见下面的“模块和元件的后代选择器的扩展类”。<br>通过使用后代选择器的方法，你不需要考虑他的命名是否已被使用，因为他只在当前模块或元件中生效，同样的样式名可以在不同的模块或元件中重复使用，互不干扰；在多人协作或者分模块协作的时候效果尤为明显！<br>后代选择器不需要完整表现结构树层级，尽量能短则短。<br>注：后代选择器不要在页面布局中使用，因为污染的可能性较大；</p>
<pre><code>/* 这里的.itm和.cnt只在.m-list中有效 */
.m-list{margin:0;padding:0;}
.m-list .itm{margin:1px;padding:1px;}
.m-list .cnt{margin-left:100px;}
/* 这里的.cnt和.num只在.m-page中有效 */
.m-page{height:20px;}
.m-page .cnt{text-align:center;}
.m-page .num{border:1px solid #ddd;}
</code></pre><h3 id="命名应简约而不失语义"><a href="#命名应简约而不失语义" class="headerlink" title="命名应简约而不失语义"></a>命名应简约而不失语义</h3><pre><code>/* 反对：表现化的或没有语义的命名 */
.m-abc .green2{}
.g-left2{}
/* 推荐：使用有语义的简短的命名 */
.m-list .wrap2{}
.g-side2{}
</code></pre><h3 id="相同语义的不同类命名"><a href="#相同语义的不同类命名" class="headerlink" title="相同语义的不同类命名"></a>相同语义的不同类命名</h3><p>方法：直接加数字或字母区分即可（如：.m-list、.m-list2、.m-list3等，都是列表模块，但是是完全不一样的模块）。<br>其他举例：.f-fw0、.f-fw1、.s-fc0、.s-fc1、.m-logo2、.m-logo3、u-btn、u-btn2等等。</p>
<h3 id="模块和元件的扩展类的命名方法"><a href="#模块和元件的扩展类的命名方法" class="headerlink" title="模块和元件的扩展类的命名方法"></a>模块和元件的扩展类的命名方法</h3><p>当A、B、C、…它们类型相同且外形相似区别不大，那么就以它们中出现率最高的做成基类，其他做成基类的扩展。<br>方法：+“-”+数字或字母（如：.m-list的扩展类为.m-list-1、.m-list-2等）。<br>补充：基类自身可以独立使用（如：class=”m-list”即可），扩展类必须基于基类使用（如：class=”m-list m-list-2”）。<br>如果你的扩展类是表示不同状态，那么你可以这样命名：u-btn-dis，u-btn-hov，m-box-sel，m-box-hov等等，然后像这样使用：class=”u-btn u-btn-dis”。<br>如果你的网站可以不兼容IE6等浏览器，那么你标识状态的方法也可以采取独立状态分类（.z-）方法：.u-btn.z-dis，.m-box.z-sel，然后像这样使用：class=”u-btn z-dis”。</p>
<h3 id="模块和元件的后代选择器的扩展类"><a href="#模块和元件的后代选择器的扩展类" class="headerlink" title="模块和元件的后代选择器的扩展类"></a>模块和元件的后代选择器的扩展类</h3><p>有时候模块内会有些类似的东西，如果你没有把它们做成元件和扩展，那么也可以使用后代选择器和扩展。<br>后代选择器：.m-login .btn{}。<br>后代选择器扩展：.m-login .btn-1{}，.m-login .btn-dis{}。<br>同样也可以采取独立状态分类（.z-）方法：.m-login .btn.z-dis{}，然后像这样使用：class=”btn z-dis”。<br>注：此方法用于类选择器，直接使用标签做为选择器的则不需要使用此命名方法。<br>注：为防止后代选择器的扩展类和大类命名规范冲突，后代选择器不允许使用单个字母。<br>　　比如：.m-list .a{}是不允许的，因为当这个.a需要扩展的时候就会变成.a-bb，这样就和大类的命名规范冲突。</p>
<h3 id="分组选择器有时可以代替扩展方法"><a href="#分组选择器有时可以代替扩展方法" class="headerlink" title="分组选择器有时可以代替扩展方法"></a>分组选择器有时可以代替扩展方法</h3><p>有时候虽然两个同类型的模块很相似，但是你希望他们之间不要有依赖关系，也就是说你不希望使用扩展的方法，那么你可以通过合并选择器来设置共性的样式。<br>使用本方法的前提是：相同类型、功能和外观都相似，写在同一片代码区域方便维护。</p>
<pre><code>/* 两个元件共性的样式 */
.u-tip1,.u-tip2{}
.u-tip1 .itm,.u-tip2 .itm{}
/* 在分别是两个元件各自的样式 */
/* tip1 */
.u-tip1{}
.u-tip1 .itm{}
/* tip2 */
.u-tip2{}
.u-tip2 .itm{}
</code></pre><h3 id="防止污染和被污染"><a href="#防止污染和被污染" class="headerlink" title="防止污染和被污染"></a>防止污染和被污染</h3><p>当模块或元件之间互相嵌套，且使用了相同的标签选择器或其他后代选择器，那么里面的选择器就会被外面相同的选择器所影响。<br>所以，如果你的模块或元件可能嵌套或被嵌套于其他模块或元件，那么要慎用标签选择器，必要时采用类选择器，并注意命名方式，可以采用.m-layer .layerxxx、.m-list2 .list2xxx的形式来降低后代选择器的污染性。</p>
<h2 id="代码格式"><a href="#代码格式" class="headerlink" title="代码格式"></a>代码格式</h2><p>选择器、属性和值都使用小写<br>在xhtml标准中规定了所有标签、属性和值都小写，CSS也是如此。</p>
<h3 id="单行写完一个选择器定义"><a href="#单行写完一个选择器定义" class="headerlink" title="单行写完一个选择器定义"></a>单行写完一个选择器定义</h3><p>便于选择器的寻找和阅读，也便于插入新选择器和编辑，便于模块等的识别。去除多余空格，使代码紧凑减少换行。<br>如果有嵌套定义，可以采取内部单行的形式。</p>
<pre><code>/* 单行定义一个选择器 */
.m-list li,.m-list h3{width:100px;padding:10px;border:1px solid #ddd;}
/* 这是一个有嵌套定义的选择器 */
@media all and (max-width:600px){
    .m-class1 .itm{height:17px;line-height:17px;font-size:12px;}
    .m-class2 .itm{width:100px;overflow:hidden;}
}
@-webkit-keyframes showitm{
    0%{height:0;opacity:0;}
    100%{height:100px;opacity:1;}
}
</code></pre><h3 id="最后一个值也以分号结尾"><a href="#最后一个值也以分号结尾" class="headerlink" title="最后一个值也以分号结尾"></a>最后一个值也以分号结尾</h3><p>通常在大括号结束前的值可以省略分号，但是这样做会对修改、添加和维护工作带来不必要的失误和麻烦。</p>
<h3 id="省略值为0时的单位"><a href="#省略值为0时的单位" class="headerlink" title="省略值为0时的单位"></a>省略值为0时的单位</h3><p>为节省不必要的字节同时也使阅读方便，我们将0px、0em、0%等值缩写为0。</p>
<pre><code>.m-box{margin:0 10px;background-position:50% 0;}
</code></pre><h3 id="使用单引号"><a href="#使用单引号" class="headerlink" title="使用单引号"></a>使用单引号</h3><p>省略url引用中的引号，其他需要引号的地方使用单引号。</p>
<pre><code>.m-box{background:url(bg.png);}
.m-box:after{content:&apos;.&apos;;}
</code></pre><h3 id="使用16进制表示颜色值"><a href="#使用16进制表示颜色值" class="headerlink" title="使用16进制表示颜色值"></a>使用16进制表示颜色值</h3><p>除非你需要透明度而使用rgba，否则都使用#f0f0f0这样的表示方法，并尽量缩写。</p>
<pre><code>.m-box{color:#f00;background:rgba(0,0,0,0.5);}
</code></pre><h3 id="根据属性的重要性按顺序书写"><a href="#根据属性的重要性按顺序书写" class="headerlink" title="根据属性的重要性按顺序书写"></a>根据属性的重要性按顺序书写</h3><p>只遵循横向顺序即可，先显示定位布局类属性，后盒模型等自身属性，最后是文本类及修饰类属性。</p>
<p>| → | 显示属性 | 自身属性 | 文本属性和其他修饰 |<br>| | —– |:—-:| —– |:—-:|<br>| | display | width |    font |<br>| | visibility | height |    text-align |<br>| | position | margin | text-decoration |<br>| | float | padding |    vertical-align |<br>| | clear | border |    white-space |<br>| | list-style | overflow | color |<br>| | top | min-width |    background |</p>
<pre><code>.m-box{position:relative;width:600px;margin:0 auto 10px;text-align:center;color:#000;}
</code></pre><p>如果属性间存在关联性，则不要隔开写。</p>
<pre><code>/* 这里的height和line-height有关联性 */
.m-box{position:relative;height:20px;line-height:20px;padding:5px;color:#000;}
</code></pre><h3 id="私有在前，标准在后"><a href="#私有在前，标准在后" class="headerlink" title="私有在前，标准在后"></a>私有在前，标准在后</h3><p>先写带有浏览器私有标志的，后写W3C标准的。</p>
<pre><code>.m-box{-webkit-box-shadow:0 0 0 #000;-moz-box-shadow:0 0 0 #000;box-shadow:0 0 0 #000;}
</code></pre><h3 id="注释格式：-注释文字"><a href="#注释格式：-注释文字" class="headerlink" title="注释格式：/ 注释文字 /"></a>注释格式：/<em> 注释文字 </em>/</h3><p>对选择器的注释统一写在被注释对象的上一行，对属性及值的注释写于分号后。<br>注释内容两端需空格，已确保即使在编码错误的情况下也可以正确解析样式。<br>在必要的情况下，可以使用块状注释，块状注释保持统一的缩进对齐。<br>原则上每个系列的样式都需要有一个注释，言简意赅的表明名称、用途、注意事项等。</p>
<pre><code>/* 块状注释文字
 * 块状注释文字
 * 块状注释文字
 */
.m-list{width:500px;}
.m-list li{height:20px;line-height:20px;/* 这里是对line-height的一个注释 */overflow:hidden;}
.m-list li a{color:#333;}
/* 单行注释文字 */
.m-list li em{color:#666;}
</code></pre><h3 id="原则上不允许使用Hack"><a href="#原则上不允许使用Hack" class="headerlink" title="原则上不允许使用Hack"></a>原则上不允许使用Hack</h3><p>很多不兼容问题可以通过改变方法和思路来解决，并非一定需要Hack，根据经验你完全可以绕过某些兼容问题。<br>一种合理的结构和合理的样式，是极少会碰到兼容问题的。<br>由于浏览器自身缺陷，我们无法避开的时候，可以允许使用适当的Hack。</p>
<h3 id="统一Hack方法"><a href="#统一Hack方法" class="headerlink" title="统一Hack方法"></a>统一Hack方法</h3><p>统一使用“*”和“_”分别对IE7和6进行Hack。如下代码所示：</p>
<pre><code>/* IE7会显示灰色#888，IE6会显示白色#fff，其他浏览器显示黑色#000 */
.m-list{color:#000;*color:#888;_color:#fff;}
</code></pre><h3 id="建议并适当缩写值"><a href="#建议并适当缩写值" class="headerlink" title="建议并适当缩写值"></a>建议并适当缩写值</h3><p>“建议并适当”是因为缩写总是会包含一系列的值，而有时候我们并不希望设置某一值，反而造成了麻烦，那么这时候你可以不缩写，而是分开写。</p>
<p>当然，在一切可以缩写的情况下，请务必缩写，它最大的好处就是节省了字节，便于维护，并使阅读更加一目了然。</p>
<p>缩写方法请查阅css手册。</p>
<h3 id="选择器顺序"><a href="#选择器顺序" class="headerlink" title="选择器顺序"></a>选择器顺序</h3><p>请综合考虑以下顺序依据：</p>
<ol>
<li>从大到小（以选择器的范围为准）</li>
<li>从低到高（以等级上的高低为准）</li>
<li>从先到后（以结构上的先后为准）</li>
<li>从父到子（以结构上的嵌套为准）</li>
</ol>
<figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line">以下仅为简单示范：</div><div class="line"><span class="comment">/* 从大到小 */</span></div><div class="line"><span class="selector-class">.m-list</span> <span class="selector-tag">p</span>&#123;<span class="attribute">margin</span>:<span class="number">0</span>;<span class="attribute">padding</span>:<span class="number">0</span>;&#125;</div><div class="line"><span class="selector-class">.m-list</span> <span class="selector-tag">p</span><span class="selector-class">.part</span>&#123;<span class="attribute">margin</span>:<span class="number">1px</span>;<span class="attribute">padding</span>:<span class="number">1px</span>;&#125;</div><div class="line"><span class="comment">/* 从低到高 */</span></div><div class="line"><span class="selector-class">.m-logo</span> <span class="selector-tag">a</span>&#123;<span class="attribute">color</span>:<span class="number">#f00</span>;&#125;</div><div class="line"><span class="selector-class">.m-logo</span> <span class="selector-tag">a</span><span class="selector-pseudo">:hover</span>&#123;<span class="attribute">color</span>:<span class="number">#fff</span>;&#125;</div><div class="line"><span class="comment">/* 从先到后 */</span></div><div class="line"><span class="selector-class">.g-hd</span>&#123;<span class="attribute">height</span>:<span class="number">60px</span>;&#125;</div><div class="line"><span class="selector-class">.g-bd</span>&#123;<span class="attribute">height</span>:<span class="number">60px</span>;&#125;</div><div class="line"><span class="selector-class">.g-ft</span>&#123;<span class="attribute">height</span>:<span class="number">60px</span>;&#125;</div><div class="line"><span class="comment">/* 从父到子 */</span></div><div class="line"><span class="selector-class">.m-list</span>&#123;<span class="attribute">width</span>:<span class="number">300px</span>;&#125;</div><div class="line"><span class="selector-class">.m-list</span> <span class="selector-class">.itm</span>&#123;<span class="attribute">float</span>:left;&#125;</div></pre></td></tr></table></figure>
<h3 id="选择器等级"><a href="#选择器等级" class="headerlink" title="选择器等级"></a>选择器等级</h3><p>a = 行内样式style。<br>b = ID选择器的数量。<br>c = 类、伪类和属性选择器的数量。<br>d = 类型选择器和伪元素选择器的数量。</p>
<table>
<thead>
<tr>
<th>选择器</th>
<th style="text-align:center">等级(a,b,c,d)</th>
</tr>
</thead>
<tbody>
<tr>
<td>style=””</td>
<td style="text-align:center">1,0,0,0</td>
</tr>
<tr>
<td>#wrapper #content {}</td>
<td style="text-align:center">0,2,0,0</td>
</tr>
<tr>
<td>#content .dateposted {}</td>
<td style="text-align:center">0,1,1,0</td>
</tr>
<tr>
<td>div#content {}</td>
<td style="text-align:center">0,1,0,1</td>
</tr>
<tr>
<td>#content p {}</td>
<td style="text-align:center">0,1,0,1</td>
</tr>
<tr>
<td>#content {}</td>
<td style="text-align:center">0,1,0,0</td>
</tr>
<tr>
<td>p.comment .dateposted {}</td>
<td style="text-align:center">0,0,2,1</td>
</tr>
<tr>
<td>div.comment p {}</td>
<td style="text-align:center">0,0,1,2</td>
</tr>
<tr>
<td>.comment p {}</td>
<td style="text-align:center">0,0,1,1</td>
</tr>
<tr>
<td>p.comment {}</td>
<td style="text-align:center">0,0,1,1</td>
</tr>
<tr>
<td>.comment {}</td>
<td style="text-align:center">0,0,1,0</td>
</tr>
<tr>
<td>div p {}</td>
<td style="text-align:center">0,0,0,2</td>
</tr>
<tr>
<td>p {}</td>
<td style="text-align:center">0,0,0,1</td>
</tr>
</tbody>
</table>
<h2 id="优化方案"><a href="#优化方案" class="headerlink" title="优化方案"></a>优化方案</h2><h3 id="值缩写"><a href="#值缩写" class="headerlink" title="值缩写"></a>值缩写</h3><p>缩写值可以减少CSS文件大小，并增加可读性和可维护性。<br>但并非所有的值都必须缩写，因为当一个属性的值缩写时，总是会将所有项都设置一遍，而有时候我们不希望设置值里的某些项。</p>
<pre><code>/* 比如我们用下面这个样式来让某个定宽的容器水平居中，我们要的只是left和right，
 * 而top和bottom不是这个样式要关心的（如果设置了反倒会影响其他样式在这个容器上的使用），
 * 所以这时我们就不需要缩写
 */
.f-mgha{margin-left:auto;margin-right:auto;}
/* 比如下面这个模块的样式设置，我们确实需要设置padding的所有项，于是我们就可以采用缩写 */
.m-link{padding:6px 12px;}
常用的缩写方法请参见代码格式。
</code></pre><h3 id="避免耗性能的属性"><a href="#避免耗性能的属性" class="headerlink" title="避免耗性能的属性"></a>避免耗性能的属性</h3><p>以下所举列的属性可能造成渲染性能问题。不过有时候需求大于一切……</p>
<pre><code>/* expression */
.class{width:expression(this.width&gt;100?&apos;100px&apos;:&apos;auto&apos;);}
/* filter */
.class{filter:alpha(opacity=50);}
</code></pre><h3 id="选择器合并"><a href="#选择器合并" class="headerlink" title="选择器合并"></a>选择器合并</h3><p>即CSS选择器组合，可以一次定义多个选择器，为你节省很多字节和宝贵时间。<br>通常我们会将定义相同的或者有大部分属性值相同（确实是因为相关而相同）的一系列选择器组合到一起（采用逗号的方法）来统一定义。</p>
<pre><code>/* 以下对布局类选择器统一做了清除浮动的操作 */
.g-hd:after,.g-bd:after,.g-ft:after{display:block;visibility:hidden;clear:both;height:0;content:&quot;.&quot;;}
.g-hd,.g-bd,.g-ft{zoom:1;}
/* 通常background总是会占用很多字节，所以一般情况下，我们都会这样统一调用 */
.m-logo,.m-help,.m-list li,.u-tab li,.u-tab li a{background:url(../images/sprite.png) no-repeat 9999px 9999px;}
.m-logo{background-position:0 0;}
/* 以下是某个元件的写法，因为确实很多元素是联动的或相关的，所以采用了组合写法，可以方便理解和修改 */
.u-tab li,.u-tab li a{display:inline;float:left;height:30px;line-height:30px;}
.u-tab li{margin:0 3px;}
.u-tab li a{padding:0 6px;}
</code></pre><h3 id="背景图优化合并"><a href="#背景图优化合并" class="headerlink" title="背景图优化合并"></a>背景图优化合并</h3><h4 id="图片本身的优化："><a href="#图片本身的优化：" class="headerlink" title="图片本身的优化："></a>图片本身的优化：</h4><ol>
<li>图像质量要求和图像文件大小决定你用什么格式的图片，用较小的图片文件呈现较好的图像质量。</li>
<li>当图片色彩过于丰富且无透明要求时，建议采用jpg格式并保存为较高质量。</li>
<li>当图片色彩过于丰富又有透明或半透明要求或阴影效果时，建议采用png24格式，并对IE6进行png8退化（或在不得已情况下使用滤镜）。</li>
<li>当图片色彩不太丰富时无论有无透明要求，请采用png8格式，大多数情况下建议采用这种格式。</li>
<li>当图片有动画时，只能使用gif格式。</li>
<li>你可以使用工具对图片进行再次压缩，但前提是不会影响色彩和透明。</li>
</ol>
<h4 id="多张图片的合并："><a href="#多张图片的合并：" class="headerlink" title="多张图片的合并："></a>多张图片的合并：</h4><ol>
<li>单个图标之间必须保留空隙，空隙大小由容器大小及显示方式决定。这样做的好处是既考虑了“容错性”又提高了图片的可维护性。</li>
<li>图标的排列方式，也由容器大小及显示方式决定。排列方式分为以下几种：横向排列（容器宽度有限）、纵向排列（容器高度有限）、斜线排列（容器宽高不限），靠左排列（容器背景居左）、靠右排列（容器背景居右）、水平居中排列（容器背景水平居中）、垂直居中排列（容器背景垂直居中）。</li>
<li>合并后图片大小不宜超过50K，建议大小在20K-50K之间。</li>
<li>为保证多次修改后的图片质量，请保留一份PSD原始图，修改和添加都在PSD中进行，最后导出png。</li>
</ol>
<h4 id="分类合并："><a href="#分类合并：" class="headerlink" title="分类合并："></a>分类合并：</h4><p>并不是把所有的图标都合并在一张图片里就是最好的，除了要控制图片大小之外还要注意以下方法。</p>
<ol>
<li>按照图片排列方式，把排列方式一样的图片进行合并，便于样式控制。</li>
<li>按照模块或元件，把同属于一个模块或元件的图片进行合并，方便模块或元件的维护。</li>
<li>按照图片大小，把大小一致或差不多的图片进行合并，可充分利用图片空间。</li>
<li>按照图片色彩，把色彩一致或差不多的图片进行合并，保证合并后图片的色彩不过于丰富，可防止色彩失真。</li>
<li>综合以上方法进行合并。</li>
</ol>
<h4 id="Hack的避免"><a href="#Hack的避免" class="headerlink" title="Hack的避免"></a>Hack的避免</h4><ol>
<li>当避免的代价较大时，可以使用Hack而不避免，比如你需要增加很多HTML或多写很多CSS时会得不偿失。</li>
<li>丰富的实战经验可以帮助你了解那些常见问题并用多种不同的思路来避免它，所以经验和思维方法在这里显得很重要。</li>
<li>根据你自己的能力来解决Hack的问题，我们不建议你用一个自己都没有把握的方法来避免Hack，因为也许你这个方法本身存在你没有发现的问题。</li>
</ol>
<h3 id="如果CSS可以做到，就不要使用JS"><a href="#如果CSS可以做到，就不要使用JS" class="headerlink" title="如果CSS可以做到，就不要使用JS"></a>如果CSS可以做到，就不要使用JS</h3><p>让CSS做更多的事，减轻JS开发量。</p>
<ol>
<li>用CSS控制交互或视觉的变化，JS只需要更改className。</li>
<li>利用CSS一次性更改多个节点样式，避免多次渲染，提高渲染效率。</li>
<li>如果你的产品允许不兼容低版本浏览器，那么动画实现可以交给CSS。</li>
</ol>
<h3 id="便于阅读修改"><a href="#便于阅读修改" class="headerlink" title="便于阅读修改"></a>便于阅读修改</h3><p>如果你做到了“CSS规范”的所有要求，自然你也就写出了一个便于阅读和修改的漂亮的CSS。当然，代码格式和命名规则是相对重要一些的。</p>
<h3 id="清晰的CSS模块"><a href="#清晰的CSS模块" class="headerlink" title="清晰的CSS模块"></a>清晰的CSS模块</h3><p>如果你做到了命名规则的要求，你的CSS模块也就清晰可见了。用“注释”来说明每一个模块对于较大的CSS文件来说显得尤为重要。</p>
<h3 id="文件压缩"><a href="#文件压缩" class="headerlink" title="文件压缩"></a>文件压缩</h3><p>合理的书写CSS能很大程度上减少文件大小，完成后，在不损坏文件内容的情况下，想尽一切办法压缩你的CSS，你可以借助压缩工具把注释和多余的空格、换行去掉。压缩工具详见：“HTML/CSS工具”部分。</p>
<h3 id="其他格式优化"><a href="#其他格式优化" class="headerlink" title="其他格式优化"></a>其他格式优化</h3><p>优化方法请参见代码格式。</p>
<h2 id="最佳实践"><a href="#最佳实践" class="headerlink" title="最佳实践"></a>最佳实践</h2><h3 id="最佳选择器写法（模块）"><a href="#最佳选择器写法（模块）" class="headerlink" title="最佳选择器写法（模块）"></a>最佳选择器写法（模块）</h3><pre><code>/* 这是某个模块 */
.m-nav{}/* 模块容器 */
.m-nav li,.m-nav a{}/* 先共性  优化组合 */
.m-nav li{}/* 后个性  语义化标签选择器 */
.m-nav a{}/* 后个性中的共性 按结构顺序 */
.m-nav a.a1{}/* 后个性中的个性 */
.m-nav a.a2{}/* 后个性中的个性 */
.m-nav .z-crt a{}/* 交互状态变化 */
.m-nav .z-crt a.a1{}
.m-nav .z-crt a.a2{}
.m-nav .btn{}/* 典型后代选择器 */
.m-nav .btn-1{}/* 典型后代选择器扩展 */
.m-nav .btn-dis{}/* 典型后代选择器扩展（状态） */
.m-nav .btn.z-dis{}/* 作用同上，请二选一（如果可以不兼容IE6时使用） */
.m-nav .m-sch{}/* 控制内部其他模块位置 */
.m-nav .u-sel{}/* 控制内部其他元件位置 */
.m-nav-1{}/* 模块扩展 */
.m-nav-1 li{}
.m-nav-dis{}/* 模块扩展（状态） */
.m-nav.z-dis{}/* 作用同上，请二选一（如果可以不兼容IE6时使用） */
</code></pre><h3 id="统一语义理解和命名"><a href="#统一语义理解和命名" class="headerlink" title="统一语义理解和命名"></a>统一语义理解和命名</h3><h4 id="布局（-g-）"><a href="#布局（-g-）" class="headerlink" title="布局（.g-）"></a>布局（.g-）</h4><table>
<thead>
<tr>
<th>语义</th>
<th>命名</th>
<th>简写</th>
</tr>
</thead>
<tbody>
<tr>
<td>文档</td>
<td>doc</td>
<td>doc</td>
</tr>
<tr>
<td>头部</td>
<td>head</td>
<td>hd</td>
</tr>
<tr>
<td>主体</td>
<td>body</td>
<td>bd</td>
</tr>
<tr>
<td>尾部</td>
<td>foot</td>
<td>ft</td>
</tr>
<tr>
<td>主栏</td>
<td>main</td>
<td>mn</td>
</tr>
<tr>
<td>主栏子容器</td>
<td>mainc</td>
<td>mnc</td>
</tr>
<tr>
<td>侧栏</td>
<td>side</td>
<td>sd</td>
</tr>
<tr>
<td>侧栏子容器</td>
<td>sidec</td>
<td>sdc</td>
</tr>
<tr>
<td>盒容器</td>
<td>wrap/box</td>
<td>wrap/box</td>
</tr>
</tbody>
</table>
<h4 id="模块（-m-）、元件（-u-）"><a href="#模块（-m-）、元件（-u-）" class="headerlink" title="模块（.m-）、元件（.u-）"></a>模块（.m-）、元件（.u-）</h4><table>
<thead>
<tr>
<th>语义</th>
<th>命名</th>
<th>简写</th>
</tr>
</thead>
<tbody>
<tr>
<td>导航</td>
<td>nav</td>
<td>nav</td>
</tr>
<tr>
<td>子导航</td>
<td>subnav</td>
<td>snav</td>
</tr>
<tr>
<td>面包屑</td>
<td>crumb</td>
<td>crm</td>
</tr>
<tr>
<td>菜单</td>
<td>menu</td>
<td>menu</td>
</tr>
<tr>
<td>选项卡</td>
<td>tab</td>
<td>tab</td>
</tr>
<tr>
<td>标题区</td>
<td>head</td>
<td>title    hd/tt</td>
</tr>
<tr>
<td>内容区</td>
<td>body</td>
<td>content    bd/ct</td>
</tr>
<tr>
<td>列表</td>
<td>list</td>
<td>lst</td>
</tr>
<tr>
<td>表格</td>
<td>table</td>
<td>tb</td>
</tr>
<tr>
<td>表单</td>
<td>form</td>
<td>fm</td>
</tr>
<tr>
<td>热点</td>
<td>hot</td>
<td>hot</td>
</tr>
<tr>
<td>排行</td>
<td>top</td>
<td>top</td>
</tr>
<tr>
<td>登录</td>
<td>login</td>
<td>log</td>
</tr>
<tr>
<td>标志</td>
<td>logo</td>
<td>logo</td>
</tr>
<tr>
<td>广告</td>
<td>advertise</td>
<td>ad</td>
</tr>
<tr>
<td>搜索</td>
<td>search</td>
<td>sch</td>
</tr>
<tr>
<td>幻灯</td>
<td>slide</td>
<td>sld</td>
</tr>
<tr>
<td>提示</td>
<td>tips</td>
<td>tips</td>
</tr>
<tr>
<td>帮助</td>
<td>help</td>
<td>help</td>
</tr>
<tr>
<td>新闻</td>
<td>news</td>
<td>news</td>
</tr>
<tr>
<td>下载</td>
<td>download</td>
<td>dld</td>
</tr>
<tr>
<td>注册</td>
<td>regist</td>
<td>reg</td>
</tr>
<tr>
<td>投票</td>
<td>vote</td>
<td>vote</td>
</tr>
<tr>
<td>版权</td>
<td>copyright</td>
<td>cprt</td>
</tr>
<tr>
<td>结果</td>
<td>result</td>
<td>rst</td>
</tr>
<tr>
<td>标题</td>
<td>title</td>
<td>tt</td>
</tr>
<tr>
<td>按钮</td>
<td>button</td>
<td>btn</td>
</tr>
<tr>
<td>输入</td>
<td>input</td>
<td>ipt</td>
</tr>
</tbody>
</table>
<h4 id="功能（-f-）"><a href="#功能（-f-）" class="headerlink" title="功能（.f-）"></a>功能（.f-）</h4><table>
<thead>
<tr>
<th>语义</th>
<th>命名</th>
<th>简写</th>
</tr>
</thead>
<tbody>
<tr>
<td>浮动清除</td>
<td>clearboth</td>
<td>cb</td>
</tr>
<tr>
<td>向左浮动</td>
<td>floatleft</td>
<td>fl</td>
</tr>
<tr>
<td>向右浮动</td>
<td>floatright</td>
<td>fr</td>
</tr>
<tr>
<td>内联块级</td>
<td>inlineblock</td>
<td>ib</td>
</tr>
<tr>
<td>文本居中</td>
<td>textaligncenter</td>
<td>tac</td>
</tr>
<tr>
<td>文本居右</td>
<td>textalignright</td>
<td>tar</td>
</tr>
<tr>
<td>文本居左</td>
<td>textalignleft</td>
<td>tal</td>
</tr>
<tr>
<td>垂直居中</td>
<td>verticalalignmiddle</td>
<td>vam</td>
</tr>
<tr>
<td>溢出隐藏</td>
<td>overflowhidden</td>
<td>oh</td>
</tr>
<tr>
<td>完全消失</td>
<td>displaynone</td>
<td>dn</td>
</tr>
<tr>
<td>字体大小</td>
<td>fontsize</td>
<td>fs</td>
</tr>
<tr>
<td>字体粗细</td>
<td>fontweight</td>
<td>fw</td>
</tr>
</tbody>
</table>
<h4 id="皮肤（-s-）"><a href="#皮肤（-s-）" class="headerlink" title="皮肤（.s-）"></a>皮肤（.s-）</h4><table>
<thead>
<tr>
<th>语义</th>
<th>命名</th>
<th>简写</th>
</tr>
</thead>
<tbody>
<tr>
<td>字体颜色</td>
<td>fontcolor</td>
<td>fc</td>
</tr>
<tr>
<td>背景</td>
<td>background</td>
<td>bg</td>
</tr>
<tr>
<td>背景颜色</td>
<td>backgroundcolor</td>
<td>bgc</td>
</tr>
<tr>
<td>背景图片</td>
<td>backgroundimage</td>
<td>bgi</td>
</tr>
<tr>
<td>背景定位</td>
<td>backgroundposition</td>
<td>bgp</td>
</tr>
<tr>
<td>边框颜色</td>
<td>bordercolor</td>
<td>bdc</td>
</tr>
</tbody>
</table>
<h4 id="状态（-z-）"><a href="#状态（-z-）" class="headerlink" title="状态（.z-）"></a>状态（.z-）</h4><table>
<thead>
<tr>
<th>语义</th>
<th>命名</th>
<th>简写</th>
</tr>
</thead>
<tbody>
<tr>
<td>选中</td>
<td>selected</td>
<td>sel</td>
</tr>
<tr>
<td>当前</td>
<td>current</td>
<td>crt</td>
</tr>
<tr>
<td>显示</td>
<td>show</td>
<td>show</td>
</tr>
<tr>
<td>隐藏</td>
<td>hide</td>
<td>hide</td>
</tr>
<tr>
<td>打开</td>
<td>open</td>
<td>open</td>
</tr>
<tr>
<td>关闭</td>
<td>close</td>
<td>close</td>
</tr>
<tr>
<td>出错</td>
<td>error</td>
<td>err</td>
</tr>
<tr>
<td>不可用</td>
<td>disabled</td>
<td>dis</td>
</tr>
</tbody>
</table>
<h2 id="典型错误"><a href="#典型错误" class="headerlink" title="典型错误"></a>典型错误</h2><h3 id="不符合NEC规范的选择器用法"><a href="#不符合NEC规范的选择器用法" class="headerlink" title="不符合NEC规范的选择器用法"></a>不符合NEC规范的选择器用法</h3><pre><code>.class{}
</code></pre><p>不要以一个没有类别的样式作为主选择器，这样的选择器只能作为后代选择器使用，比如.m-xxx .class{}。</p>
<pre><code>.m-xxx div{}
</code></pre><p>不要以没有语义的标签作为选择器，这会造成大面积污染，除非你可以断定现在或将来你的这个选择器不会污染其他同类。</p>
<pre><code>.g-xxx .class{}
</code></pre><p>不要在页面布局中使用后代选择器，因为这个后代选择器可能会污染里面的元素。</p>
<pre><code>.g-xxx .m-yyy{}.g-xxx .u-yyy{}
</code></pre><p>不要用布局去控制模块或元件，模块和元件应与布局分离独立。</p>
<pre><code>.m-xxx .f-xxx{}.m-xxx .s-xxx{}
</code></pre><p>不要通过模块或其他类来重定义或修改或添加已经定义好的功能类选择器和皮肤类选择器。</p>
<pre><code>.m-xxx .class .class .class .class{}
</code></pre><p>不要将选择器写的过于冗长，这会额外增加文件大小并且限制了太小范围的选择器，使树形结构过于严格应用范围过于局限，建议3-4个长度之内写完。选择器并不需要完整反映结构嵌套顺序，相反，能简则简。</p>
<pre><code>.m-xxx .m-yyy .zzz{}
</code></pre><p>不要越级控制，如果.zzz是.m-yyy的后代选择器，那么不允许.m-yyy之外的选择器控制或修改.zzz。此时可以使用.m-yyy的扩展来修改.zzz，比如.m-yyy-1 .zzz{}。</p>
<h3 id="扩展类使用错误"><a href="#扩展类使用错误" class="headerlink" title="扩展类使用错误"></a>扩展类使用错误</h3><p>扩展类必须和其基类同时使用于同一个节点。</p>
<pre><code>错误：
class=&quot;g-xxx g-yyy-1&quot; 
class=&quot;m-xxx-1&quot; 
class=&quot;u-xxx u-yyy-1&quot; 
class=&quot;xxx-yyy&quot;。
正确：
class=&quot;g-xxx g-xxx-1&quot; 
class=&quot;m-xxx m-xxx-1&quot; 
class=&quot;u-yyy u-yyy-1&quot; 
class=&quot;xxx xxx-yyy&quot;。
</code></pre><p>参考资料：<br><a href="http://www.csdn.net/article/2011-12-02/308445" target="_blank" rel="external">编写出色CSS代码的13个建议</a></p>

      
      
        <div class="page-reward">
          <p><a href="javascript:void(0)" onclick="dashangToggle()" class="dashang">赏</a></p>
          <div class="hide_box"></div>
          <div class="shang_box">
            <a class="shang_close" href="javascript:void(0)" onclick="dashangToggle()">×</a>
            <div class="shang_tit">
              <p>纯属好玩</p>
            </div>
            <div class="shang_payimg">
              <img src="/img/alipayimg.jpg" alt="扫码支持" title="扫一扫" />
            </div>
              <div class="pay_explain">扫码打赏，你说多少就多少</div>
            <div class="shang_payselect">
              
                <div class="pay_item checked" data-id="alipay">
                  <span class="radiobox"></span>
                  <span class="pay_logo"><img src="/img/alipay.png" alt="支付宝" /></span>
                </div>
              
              
                <div class="pay_item" data-id="wechat">
                  <span class="radiobox"></span>
                  <span class="pay_logo"><img src="/img/weixin.png" alt="微信" /></span>
                </div>
              
            </div>
            <div class="shang_info">
              <p>打开<span id="shang_pay_txt">支付宝</span>扫一扫，即可进行扫码打赏哦</p>
            </div>
          </div>
        </div>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script>
        <script type="text/javascript">
          $(".pay_item").click(function(){
            $(this).addClass('checked').siblings('.pay_item').removeClass('checked');
            var dataid=$(this).attr('data-id');
            $(".shang_payimg img").attr("src","/img/"+dataid+"img.jpg");
            $("#shang_pay_txt").text(dataid=="alipay"?"支付宝":"微信");
          });
          function dashangToggle(){
            window._hmt.push(['_trackEvent', 'pay', 'click', '赏'])
            $(".hide_box").fadeToggle();
            $(".shang_box").fadeToggle();
          }
        </script>
      
    </div>
    
  </div>
  
    
    <div class="copyright">
        <p><span>本文标题:</span><a href="/2016/12/31/Skill/norm/normCSS/">CSS前端代码规范</a></p>
        <p><span>文章作者:</span><a href="/" title="访问 安与生 的个人博客">安与生</a></p>
        <p><span>发布时间:</span>2016年12月31日 - 18时29分</p>
        <p><span>最后更新:</span>2017年07月28日 - 18时54分</p>
        <p>
            <span>原始链接:</span><a class="post-url" href="/2016/12/31/Skill/norm/normCSS/" title="CSS前端代码规范">http://Jimmey-Jiang.github.io/2016/12/31/Skill/norm/normCSS/</a>
            <span class="copy-path" data-clipboard-text="原文: http://Jimmey-Jiang.github.io/2016/12/31/Skill/norm/normCSS/　　作者: 安与生" title="点击复制文章链接"><i class="fa fa-clipboard"></i></span>
            <script src="/js/clipboard.min.js"></script>
            <script> var clipboard = new Clipboard('.copy-path'); </script>
        </p>
        <p>
            <span>许可协议:</span><i class="fa fa-creative-commons"></i> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cn/" title="中国大陆 (CC BY-NC-SA 3.0 CN)" target = "_blank">"署名-非商用-相同方式共享 3.0"</a> 转载请保留原文链接及作者。
        </p>
    </div>



<nav id="article-nav">
  
    <a href="/2017/01/02/Induce/CSS/CSSElementAlign/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption"><</strong>
      <div class="article-nav-title">
        
          用CSS实现元素垂直居中方案
        
      </div>
    </a>
  
  
    <a href="/2016/12/31/Skill/norm/normjs/" id="article-nav-older" class="article-nav-link-wrap">
      <div class="article-nav-title">前端代码规范Javascript</div>
      <strong class="article-nav-caption">></strong>
    </a>
  
</nav>

  
</article>

    <div id="toc" class="toc-article">
    <strong class="toc-title">文章目录</strong>
    <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#分类方法"><span class="toc-number">1.</span> <span class="toc-text">分类方法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#CSS文件的分类"><span class="toc-number">1.1.</span> <span class="toc-text">CSS文件的分类</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#CSS内部的分类及其顺序"><span class="toc-number">1.2.</span> <span class="toc-text">CSS内部的分类及其顺序</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#命名规则"><span class="toc-number">2.</span> <span class="toc-text">命名规则</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#使用类选择器，放弃ID选择器"><span class="toc-number">2.1.</span> <span class="toc-text">使用类选择器，放弃ID选择器</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#NEC特殊字符：”-“连字符"><span class="toc-number">2.2.</span> <span class="toc-text">NEC特殊字符：”-“连字符</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#分类的命名方法：使用单个字母-”-“为前缀"><span class="toc-number">2.3.</span> <span class="toc-text">分类的命名方法：使用单个字母+”-“为前缀</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#后代选择器命名"><span class="toc-number">2.4.</span> <span class="toc-text">后代选择器命名</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#命名应简约而不失语义"><span class="toc-number">2.5.</span> <span class="toc-text">命名应简约而不失语义</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#相同语义的不同类命名"><span class="toc-number">2.6.</span> <span class="toc-text">相同语义的不同类命名</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#模块和元件的扩展类的命名方法"><span class="toc-number">2.7.</span> <span class="toc-text">模块和元件的扩展类的命名方法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#模块和元件的后代选择器的扩展类"><span class="toc-number">2.8.</span> <span class="toc-text">模块和元件的后代选择器的扩展类</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#分组选择器有时可以代替扩展方法"><span class="toc-number">2.9.</span> <span class="toc-text">分组选择器有时可以代替扩展方法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#防止污染和被污染"><span class="toc-number">2.10.</span> <span class="toc-text">防止污染和被污染</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#代码格式"><span class="toc-number">3.</span> <span class="toc-text">代码格式</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#单行写完一个选择器定义"><span class="toc-number">3.1.</span> <span class="toc-text">单行写完一个选择器定义</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#最后一个值也以分号结尾"><span class="toc-number">3.2.</span> <span class="toc-text">最后一个值也以分号结尾</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#省略值为0时的单位"><span class="toc-number">3.3.</span> <span class="toc-text">省略值为0时的单位</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#使用单引号"><span class="toc-number">3.4.</span> <span class="toc-text">使用单引号</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#使用16进制表示颜色值"><span class="toc-number">3.5.</span> <span class="toc-text">使用16进制表示颜色值</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#根据属性的重要性按顺序书写"><span class="toc-number">3.6.</span> <span class="toc-text">根据属性的重要性按顺序书写</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#私有在前，标准在后"><span class="toc-number">3.7.</span> <span class="toc-text">私有在前，标准在后</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#注释格式：-注释文字"><span class="toc-number">3.8.</span> <span class="toc-text">注释格式：/ 注释文字 /</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#原则上不允许使用Hack"><span class="toc-number">3.9.</span> <span class="toc-text">原则上不允许使用Hack</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#统一Hack方法"><span class="toc-number">3.10.</span> <span class="toc-text">统一Hack方法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#建议并适当缩写值"><span class="toc-number">3.11.</span> <span class="toc-text">建议并适当缩写值</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#选择器顺序"><span class="toc-number">3.12.</span> <span class="toc-text">选择器顺序</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#选择器等级"><span class="toc-number">3.13.</span> <span class="toc-text">选择器等级</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#优化方案"><span class="toc-number">4.</span> <span class="toc-text">优化方案</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#值缩写"><span class="toc-number">4.1.</span> <span class="toc-text">值缩写</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#避免耗性能的属性"><span class="toc-number">4.2.</span> <span class="toc-text">避免耗性能的属性</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#选择器合并"><span class="toc-number">4.3.</span> <span class="toc-text">选择器合并</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#背景图优化合并"><span class="toc-number">4.4.</span> <span class="toc-text">背景图优化合并</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#图片本身的优化："><span class="toc-number">4.4.1.</span> <span class="toc-text">图片本身的优化：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#多张图片的合并："><span class="toc-number">4.4.2.</span> <span class="toc-text">多张图片的合并：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#分类合并："><span class="toc-number">4.4.3.</span> <span class="toc-text">分类合并：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#Hack的避免"><span class="toc-number">4.4.4.</span> <span class="toc-text">Hack的避免</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#如果CSS可以做到，就不要使用JS"><span class="toc-number">4.5.</span> <span class="toc-text">如果CSS可以做到，就不要使用JS</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#便于阅读修改"><span class="toc-number">4.6.</span> <span class="toc-text">便于阅读修改</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#清晰的CSS模块"><span class="toc-number">4.7.</span> <span class="toc-text">清晰的CSS模块</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#文件压缩"><span class="toc-number">4.8.</span> <span class="toc-text">文件压缩</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#其他格式优化"><span class="toc-number">4.9.</span> <span class="toc-text">其他格式优化</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#最佳实践"><span class="toc-number">5.</span> <span class="toc-text">最佳实践</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#最佳选择器写法（模块）"><span class="toc-number">5.1.</span> <span class="toc-text">最佳选择器写法（模块）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#统一语义理解和命名"><span class="toc-number">5.2.</span> <span class="toc-text">统一语义理解和命名</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#布局（-g-）"><span class="toc-number">5.2.1.</span> <span class="toc-text">布局（.g-）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#模块（-m-）、元件（-u-）"><span class="toc-number">5.2.2.</span> <span class="toc-text">模块（.m-）、元件（.u-）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#功能（-f-）"><span class="toc-number">5.2.3.</span> <span class="toc-text">功能（.f-）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#皮肤（-s-）"><span class="toc-number">5.2.4.</span> <span class="toc-text">皮肤（.s-）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#状态（-z-）"><span class="toc-number">5.2.5.</span> <span class="toc-text">状态（.z-）</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#典型错误"><span class="toc-number">6.</span> <span class="toc-text">典型错误</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#不符合NEC规范的选择器用法"><span class="toc-number">6.1.</span> <span class="toc-text">不符合NEC规范的选择器用法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#扩展类使用错误"><span class="toc-number">6.2.</span> <span class="toc-text">扩展类使用错误</span></a></li></ol></li></ol>
</div>
<input type="button" id="tocButton" value="隐藏目录"  title="点击按钮隐藏或者显示文章目录">

<script src="https://7.url.cn/edu/jslib/comb/require-2.1.6,jquery-1.9.1.min.js"></script>
<script>
    var valueHide = "隐藏目录";
    var valueShow = "显示目录";

    if ($(".left-col").is(":hidden")) {
        $("#tocButton").attr("value", valueShow);
    }
    $("#tocButton").click(function() {
        if ($("#toc").is(":hidden")) {
            $("#tocButton").attr("value", valueHide);
            $("#toc").slideDown(320);
        }
        else {
            $("#tocButton").attr("value", valueShow);
            $("#toc").slideUp(350);
        }
    })
    if ($(".toc").length < 1) {
        $("#toc, #tocButton").hide();
    }
</script>





<div class="bdsharebuttonbox">
	<a href="#" class="fx fa-weibo bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a>
	<a href="#" class="fx fa-weixin bds_weixin" data-cmd="weixin" title="分享到微信"></a>
	<a href="#" class="fx fa-qq bds_sqq" data-cmd="sqq" title="分享到QQ好友"></a>
	<a href="#" class="fx fa-facebook-official bds_fbook" data-cmd="fbook" title="分享到Facebook"></a>
	<a href="#" class="fx fa-twitter bds_twi" data-cmd="twi" title="分享到Twitter"></a>
	<a href="#" class="fx fa-linkedin bds_linkedin" data-cmd="linkedin" title="分享到linkedin"></a>
	<a href="#" class="fx fa-files-o bds_copy" data-cmd="copy" title="分享到复制网址"></a>
</div>
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"2","bdSize":"24"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>




    
        <div id="gitments"></div>
<script src="/js/gitment.browser.js"></script>
<script>
    var gitment = new Gitment({
      id: window.location.pathname,
      owner: 'Jimmey-Jiang',
      repo: 'Jimmey-Jiang.github.io',
      oauth: {
        client_id: '7f50019c6a02c37e7aca',
        client_secret: 'd583910e6ae1492b375796d2c82efcda2cc67aae',
      },
    })
    gitment.render('gitments')
</script>
    



    <div class="scroll" id="post-nav-button">
        
            <a href="/2017/01/02/Induce/CSS/CSSElementAlign/" title="上一篇: 用CSS实现元素垂直居中方案">
                <i class="fa fa-angle-left"></i>
            </a>
        
        <a title="文章列表"><i class="fa fa-bars"></i><i class="fa fa-times"></i></a>
        
            <a href="/2016/12/31/Skill/norm/normjs/" title="下一篇: 前端代码规范Javascript">
                <i class="fa fa-angle-right"></i>
            </a>
        
    </div>
    <ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/2017/08/29/Tool/GitWorkflows/">Git Workflows</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/19/Tool/Git/">Git速查手册</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/18/FrontFrame/Vue/VueComponents/">Vue组件探秘</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/18/Induce/InduceSass/">深入Sass</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/18/FrontFrame/Vue/KeepAlive/">keep-alive最佳实践</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/18/Induce/CSS/CssLowFrequency/">CSS低频属性</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/08/02/Tool/Terminal/">Terminal配置</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/07/25/Induce/Weixin/JS-SDK/">WeChat SDK</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/07/12/Induce/Hack/Canvas/">浏览器常见Bug——Canvas</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/04/25/FrontFrame/Vue/Vuex/">Vuex</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/03/25/Induce/HTML/Video/">Mobile Video</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/03/25/FrontFrame/Vue/VueRouter/">Vue Router</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/03/21/Tool/Sublime/sublimeMac/">Sublime Mac 快捷键</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/02/14/FrontFrame/React/React/">React初探</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/01/02/Induce/CSS/CSSElementAlign/">用CSS实现元素垂直居中方案</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/31/Skill/norm/normCSS/">CSS前端代码规范</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/31/Skill/norm/normjs/">前端代码规范Javascript</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/31/Skill/norm/normhtml/">HTML前端代码规范</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/31/Skill/norm/normdev/">前端开发代码规范</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/27/FrontFrame/ReactNative/Components/RNCText/">React Native Text</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/27/FrontFrame/ReactNative/Components/RNCTextInput/">React Native TextInput</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/27/FrontFrame/ReactNative/Components/RNCImage/">React Native Image</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/27/FrontFrame/ReactNative/Components/RNComponents/">React Native 组件</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/26/FrontFrame/ReactNative/RNTest/">React Native 实战封装组件</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/26/FrontFrame/ReactNative/RNBasics/">React Native 基础</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/25/FrontFrame/ReactNative/RNSetOX/">React Native IOS环境搭建</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/25/FrontFrame/ReactNative/RNTools/">React Native开发工具</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/25/FrontFrame/ReactNative/RNSetAndroid/">React Native Android环境搭建（Window）</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/25/FrontFrame/ReactNative/RN/">React Native初探</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/05/08/Induce/Mobile/MobileGuide/">移动Web解决方案</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/04/02/Induce/JavaScript/JSInputSearch/">Input输入框的案例</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/04/02/Plug/Gulp/InduceGulp/">Gulp前端构建工具</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/04/02/Plug/Sublime/SublimeOmniMarkupPreviewer/">OmniMarkupPreviewer</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/04/02/Induce/HTML/HtmlRem/">移动H5自适应布局</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/03/02/Demo/TextShow/">BOOS信息展示与收缩</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/02/28/Demo/MobileRotate/">移动端横屏提示动画</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/02/27/Induce/Skill/OOCSS/">面向对象的CSS样式</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/02/27/Induce/Mobile/MobliePC/">关于移动端界面在PC端显示的实现</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/02/20/Induce/Node/NodeJsWeb/">Node.js实战 建立简单的Web服务器</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/02/20/Induce/CSS/animation/">CSS3动画探秘</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/28/Induce/Mobile/Mobile-knowledge/">移动前端知识总结</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/27/Induce/Ajax/Ajax/">Ajax学习计划</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/20/Plug/ChromePlug/">前端Chrome插件</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/19/Induce/JavaScript/JSTip/">原生JS TitleTip</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/19/Induce/Ajax/AjaxStatus/">Ajax Status请求状态</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/16/Interview/FrontMap/">【转】2015-2016前端知识体系</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/15/Induce/JavaScript/NativeJS/">原生JavaScript探索</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/01/13/Induce/HTML/HTMLbase/">HTML结构零散</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/27/Hexo/GitHubHexo/">使用GitHub搭建Hexo博客</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/27/Hexo/HexoBug/">Hexo bug</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/27/Hexo/HexoPlug/">Hexo插件安装</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/27/Hexo/Hexo/">Hexo的使用介绍</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/27/Hexo/HexoTheme/">Hexo 主题：SPFK</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/26/Skill/win7Set/">电脑优化相关</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/25/Induce/CSS/CssTips/">CSS小技巧收藏</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/25/Interview/WebFront/">web前端职业规划</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/25/Induce/HTML/media/">响应式布局</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/25/Induce/CSS/CSS/">CSS学习计划</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/24/Tool/Sublime/Sublimemarkdown/">Markdown使用指南</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/21/Tool/Sublime/Sublimebest/">Sublime Text历练</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/21/Induce/JavaScript/JQueryCDN/">CDN公共库</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/21/Plug/Sublime/SublimePackage/">Sublime插件</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/21/Demohttps://tuchong.com/1496450//">前端资源导航</a></li><li class="post-list-item"><a class="post-list-link" href="/2015/12/11/Skill/BusyFront/">Busy前端工作室</a></li></ul>
    <script src="https://7.url.cn/edu/jslib/comb/require-2.1.6,jquery-1.9.1.min.js"></script>
    <script>
        $(".post-list").addClass("toc-article");
        $(".post-list-item a").attr("target","_blank");
        $("#post-nav-button > a:nth-child(2)").click(function() {
            $(".fa-bars, .fa-times").toggle();
            $(".post-list").toggle(300);
            if ($(".toc").length > 0) {
                $("#toc, #tocButton").toggle(200, function() {
                    if ($(".switch-area").is(":visible")) {
                        $("#tocButton").attr("value", valueHide);
                        }
                    })
            }
            else {
            }
        })
    </script>



    <script>
        
    </script>
</div>
      <footer id="footer">
    <div class="outer">
        <div id="footer-info">
            <div class="footer-left">
                &copy; 2017 安与生
            </div>
            <div class="footer-right">
                <a href="http://hexo.io/" target="_blank">Hexo</a>  Theme <a href="https://github.com/Jimmey-Jiang/hexo-theme-spfk" target="_blank">spfk</a> by Jimmey-Jiang
            </div>
        </div>
        
            <div class="visit">
                
                    <span id="busuanzi_container_site_pv" style='display:none'>
                        <span id="site-visit" >海贼到访数: 
                            <span id="busuanzi_value_site_uv"></span>
                        </span>
                    </span>
                
                
                    <span>, </span>
                
                
                    <span id="busuanzi_container_page_pv" style='display:none'>
                        <span id="page-visit">本页阅读量: 
                            <span id="busuanzi_value_page_pv"></span>
                        </span>
                    </span>
                
            </div>
        
    </div>
</footer>

    </div>
    <script src="https://7.url.cn/edu/jslib/comb/require-2.1.6,jquery-1.9.1.min.js"></script>
<script src="/js/main.js"></script>

    <script>
        $(document).ready(function() {
            var backgroundnum = 24;
            var backgroundimg = "url(/background/bg-x.jpg)".replace(/x/gi, Math.ceil(Math.random() * backgroundnum));
            $("#mobile-nav").css({"background-image": backgroundimg,"background-size": "cover","background-position": "center"});
            $(".left-col").css({"background-image": backgroundimg,"background-size": "cover","background-position": "center"});
        })
    </script>




	<script>
	var _hmt = _hmt || [];
	(function() {
	  var hm = document.createElement("script");
	  hm.src = "//hm.baidu.com/hm.js?819b1c6493df653afb8c7846bc4b8db6";
	  var s = document.getElementsByTagName("script")[0]; 
	  s.parentNode.insertBefore(hm, s);
	})();
	</script>


<div class="scroll" id="scroll">
    <a href="#"><i class="fa fa-arrow-up"></i></a>
    <a href="#comments"><i class="fa fa-comments-o"></i></a>
    <a href="#footer"><i class="fa fa-arrow-down"></i></a>
</div>
<script>
    $(document).ready(function() {
        if ($("#comments").length < 1) {
            $("#scroll > a:nth-child(2)").hide();
        };
    })
</script>

<script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js">
</script>

  <script language="javascript">
    $(function() {
        $("a[title]").each(function() {
            var a = $(this);
            var title = a.attr('title');
            if (title == undefined || title == "") return;
            a.data('title', title).removeAttr('title').hover(

            function() {
                var offset = a.offset();
                $("<div id=\"anchortitlecontainer\"></div>").appendTo($("body")).html(title).css({
                    top: offset.top - a.outerHeight() - 15,
                    left: offset.left + a.outerWidth()/2 + 1
                }).fadeIn(function() {
                    var pop = $(this);
                    setTimeout(function() {
                        pop.remove();
                    }, pop.text().length * 800);
                });
            }, function() {
                $("#anchortitlecontainer").remove();
            });
        });
    });
</script>


    <script type="text/javascript">
      window.onload = function(){
        document.getElementById("search").onclick = function(){
            console.log("search")
            search();
        }
      }
      function search(){
        (function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
        (w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
        e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
        })(window,document,'script','//s.swiftypecdn.com/install/v2/st.js','_st');

        _st('install','A1Pz-LKMXbrzcFg2FWi6','2.0.0');
      }
    </script>

  </div>
</body>
</html>